﻿using System.ComponentModel.DataAnnotations;
using Fadada.FASC.SDK.DotNetCore.Attributes;
using Newtonsoft.Json;

namespace Fadada.FASC.SDK.DotNetCore.Model
{
    [RemoteService("/corp/get-auth-url","POST")]
    public class CorpAuthUrl
    {
        /// <summary>
        /// 法大大平台为该企业在该应用appId范围内分配的唯一标识。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "openCorpId", Required = Required.Always)]
        [MaxLength(64)]
        public string OpenCorpId { get; set; }

        /// <summary>
        /// 企业身份信息，可以指定，也可以不指定。当corpIdentInfoMatch为true时，在授权前需要强制匹配企业身份信息。当corpIdentInfoMatch为false时，该参数可忽略。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "corpIdentInfo", Required = Required.AllowNull)]
        public CorpIdentInfo CorpIdentInfo { get; set; }

        /// <summary>
        /// 是否需要匹配企业身份信息一致：false: 不需要匹配一致true: 需要匹配一致缺省为false。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "corpIdentInfoMatch", Required = Required.AllowNull)]
        public bool CorpIdentInfoMatch { get; set; }

        /// <summary>
        /// 企业经办人的openUserId。作为企业的经办人，也是应用系统的用户，也需要预先通过添加个人用户接口添加成用户。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "operatorId", Required = Required.Always)]
        public string OperatorId { get; set; }

        /// <summary>
        /// 企业经办人身份信息。可以指定，也可以不指定。暂行限制备注：企业经办人身份信息目前必须满足如下条件，否则无法作为企业认证的经办人：
        /// 1. 如该经办人已认证，认证的证件类型必须为身份证；2. 如该经办人尚未认证，调用该接口时如指定了证件类型，证件类型必须为身份证。实名
        /// 认证过程中，不允许修改身份信息。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "operatorIdentInfo", Required = Required.AllowNull)]
        public UserIdentInfo OperatorIdentInfo { get; set; }

        /// <summary>
        /// 企业经办人补充信息，用于个人实名时预先填充。可以提供，也可以不提供。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "operatorInfoExtend", Required = Required.AllowNull)]
        public UserInfoExtend OperatorInfoExtend { get; set; }

        /// <summary>
        /// 是否需要匹配企业经办人身份信息一致：false: 不需要匹配一致true: 需要匹配一致缺省为false。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "operatorIdentInfoMatch", Required = Required.AllowNull)]
        public bool OperatorIdentInfoMatch { get; set; }

        /// <summary>
        /// 企业认证经办人身份类型：legal_rep: 企业法定代表人deputy_auth: 企业授权代理人默认为legal_rep。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "operatorType", Required = Required.AllowNull)]
        public string OperatorType  { get; set; }

        /// <summary>
        /// 用户授权范围列表，只有在授权范围内的权限，该应用系统才可调用。所获得链接的页面交互会提示企业管理员/经办人进行授权操作。
        /// 您的业务请求的企业授权范围列表：ident_info: 身份信息(涉及企业隐私数据，需得到企业授权)signtask_init: 发起签署任务
        /// (在合同签署任务中，发起方地位特殊，需得到企业授权)resource_for_sign: 签署相关数据资源(如文档和模板等，
        /// 是属于企业的，需得到用户授权)默认为空。注意：1.法大大平台将根据该参数所请求的授权范围，在企业经办人打开的授权请求页面上展示
        /// 相关文案和交互，提醒企业经办人进行授权确认。企业经办人并不一定接受您所请求的所有授权范围，实际的授权状态和范围将通过redirectUrl的参
        /// 数或企业用户授权事件回调通知应用系统。您也可以通过调用查询企业用户基本信息查询实际的授权状态和范围。2. 注意调用时认真设置授权范
        /// 围。例如，对于那些无需在该应用系统上发起签署任务的企业，您可能无须要求signtask_init、resource_for_sign授权。如果您无需通过接口获取企业的
        /// 详细身份信息，也无需要求ident_info授权。
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "requestAuthScope", Required = Required.AllowNull)]
        public string[] RequestAuthScope { get; set; }

        /// <summary>
        /// 重定向地址。即企业经办人在返回的页面上完成操作后重定向跳转到该地址，并且附带上参数。该地址是应用系统的地址，以实现用户交互在应用系
        /// 统和法大大平台之间的连贯性。长度最大500个字符。注意：如果未设置redirectUrl，则授权完成的参数通过回调事件通知应用系统服务端
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "redirectUrl", Required = Required.AllowNull)]
        public string RedirectUrl { get; set; }
    }
}